#ifndef VERSION_CONTROL_H
#define VERSION_CONTROL_H

#include <QString>
#include <QList>
#include <QDateTime>
#include <QObject>

namespace CollaborativeDesign {

// 版本信息结构
struct Version {
    QString id;              // 版本ID
    QString author;          // 作者
    QDateTime timestamp;     // 创建时间
    QString description;     // 描述
    QString parentId;        // 父版本ID
    QString filePath;        // 文件路径
};

// 版本控制类
class VersionControl : public QObject
{
    Q_OBJECT

public:
    VersionControl();
    ~VersionControl();

    // 创建新版本
    Version createVersion(const QString& filePath, const QString& description);
    
    // 获取版本历史
    QList<Version> getVersionHistory(const QString& filePath);
    
    // 切换到指定版本
    bool switchToVersion(const QString& versionId);
    
    // 合并版本
    bool mergeVersions(const QString& sourceVersionId, const QString& targetVersionId);
    
    // 比较两个版本的差异
    QString compareVersions(const QString& versionId1, const QString& versionId2);

signals:
    // 版本创建信号
    void versionCreated(const Version& version);
    
    // 版本切换信号
    void versionSwitched(const Version& version);

private:
    // 生成版本ID
    QString generateVersionId();
    
    // 保存版本数据
    bool saveVersionData(const Version& version, const QByteArray& data);
    
    // 加载版本数据
    QByteArray loadVersionData(const QString& versionId);
    
    // 检测冲突
    QStringList detectConflicts(const QString& sourceVersionId, const QString& targetVersionId);

private:
    QList<Version> m_versions;       // 版本列表
    QString m_currentVersionId;      // 当前版本ID
    QString m_repositoryPath;        // 版本库路径
};

} // namespace CollaborativeDesign

#endif // VERSION_CONTROL_H 